/**
 *  fs 文件操作
 */

 //---------------文件的读取------------------//
 const fs = require('fs');

 fs.readFile('./data.txt',function(err,txt){ //从指定位置读取文件，把读到的内容给到回调函数的第二个参数
    console.log(txt.toString())//读取到的数据是一个二进制的字符数组，把它转成字符串输出
})

//---------------文件写入------------------//
   异步写入文件
    let data = "文件的写入练习";
    fs.writeFile('./data2.txt',data,function(err){ //指明写入到那个文件以及写入什么东西？
        if(err){
            console.log(err)
        }else{
            console.log('文件写入成功')
        }
    })

//---------------文件删除------------------//
fs.unlink('./data2.txt',function(err){ //指明要删除的文件名
    if(err){
        throw err;
    }else{
        console.log('文件删除成功')
    }
})


//  --------------------------------IO stream方式操作文件------------------------------------//

//inputStream  demo

const fs = require('fs');

let stream1 = fs.createReadStream('./data.txt');
//文件的读取是以字节流的方式进行的，不是一次能读完的，所以我们要监听数据的变化，数据变化触发回调函数
stream1.on('data',function(txt){
    console.log(txt.toString())
})
//监听end事件，读取触发回调函数
stream1.on('end',function(){
    console.log('文件读取完成')
})
//发生错误时触发回调函数
stream1.on('error',function(){
    console.log('文件读取流失败')
})

//outputStream demo

    const fs = require('fs');

    let stream2 = fs.createWriteStream('./data2.txt'); //创建写入流并指明写入到那个文件

    stream2.write('以流的方式写入一个内容。。。')  //写入内容

    stream2.on('finish',function(){
        console.log('内容已经写完')
    })

    stream2.end();  //写入完成关闭


//管道

const fs = require('fs');
let str1 = fs.createReadStream('./data.txt');
let str2 = fs.createWriteStream('./data2.txt');
str1.pipe(str2);
